/*******************************************************
 ******************************************************
 **
 ** Fuck pour cette histoire de conversion !!!!!!!
 ** Histoire de convertion complete ! @ 1/04/09 [18:05]
 ** Oublie pas que pour layout y,x
 ** A Faire : Faut pas ce compliquer la vie
 ** A Faire : Commencer la partie m_dialog_decrypteur
 ** 4 Avril : A finir l'histoire du QProgressBar
 ** 4 Avril 21:26 : Comprendre QProgressBar
 **
 ** Indication for you sky :
 ** ------------------------
 ** Type int peut avoir que 2 octects soit 16 bit
 ** ou 4 octects soit 36 bit
 * *Plage pour 2 octects  : -3 276 832 767
 **--------------------------------------------------------------------
 ** PROJET ON PAUSE DEPUIS 7 Avril 2009	00:20
 ** Le Decrypteur n'est pas encore opérationnelle ....	:(
 ** C'est a partir du ligne 804 que je blocke
 ** Hypothése : Je pense que c'est à cause de  l'instruction for
 ** qui ne peut être utilisé qu'on mode console .
 **---------------------------------------------------------------------
 ** Problème résolu le 20 avril 2009 !
 ** TO DO : les réstes de fonctions
 ** ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 ** ^FINI AT 5/10/2009  \ 10 mai 2009 \ ^
 ** ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 **
 ******************************************************
 *******************************************************/

#include "Fenetre.h"
#include <stdio.h>
#include <stdlib.h>


Fenetre::Fenetre() : QWidget()
{
	setFixedSize(400,300);
	setWindowTitle("Crypteur/Decrypteur : IP // Version alpha 0.1 ");
	setWindowIcon(QIcon(QPixmap("icone.png")));


	/*m_label[0] = new QLabel(" - // - Crypteur & Decrypteur - // -",this);
	m_label[0]->setGeometry(3,3,200,20);
	m_label[1] = new QLabel("Copyright (C) 2009 by skyhate ", this);
	m_label[1]->setGeometry(1,23,200,20);*/
	
	m_crypteur = new QPushButton("Crypteur", this);
	m_crypteur->setFont(QFont("Times", 20, QFont::Bold));

	m_decrypteur = new QPushButton("Decrypteur", this);
	m_decrypteur->setFont(QFont("Times", 20, QFont::Bold));

    #ifdef  TEST
        m_test = new QPushButton("TEST !", this);
        m_test->setFont(QFont("Times", 20, QFont::Bold));
    #endif
	m_about = new QPushButton("A propos",this);
	m_about->setFont(QFont("Times", 20, QFont::Bold));

	m_quitter = new QPushButton("Quitter",this);
	m_quitter->setFont(QFont("Times", 20, QFont::Bold));

	QGridLayout *mainLayout = new QGridLayout;
	mainLayout->addWidget(m_crypteur,1,1);
	mainLayout->addWidget(m_decrypteur,2,1);
	#ifdef  TEST
	mainLayout->addWidget(m_test,3,1);
	#endif
	mainLayout->addWidget(m_about,4,1);
	mainLayout->addWidget(m_quitter,5,1);

	// 0 : Après avoir clicker Crypteur
		m_dialog_crypteur = new QDialog(this);
		m_dialog_crypteur->setFixedSize(500,400);
		m_dialog_crypteur->setWindowTitle("- Crypteur -");

			m_label[2] = new QLabel("// - Cryptage d'IP - //",m_dialog_crypteur);
			m_label[2]->setFont(QFont("Times", 17, QFont::Bold));
			m_label[2]->resize(250,40);
			m_label[2]->move(150,20);


			m_live_crypteur = new QLabel("Bonjour/Bonsoir à toi utilisateur ", m_dialog_crypteur);
			m_live_crypteur->setFont(QFont("Times", 16, QFont::Bold));
			m_live_crypteur->resize(300,80);
			m_live_crypteur->move(100,40);

			m_live_en_ce_moment = new QLabel("Oublie pas que un IP est entre 1.1.1.1 \n         a 255.255.255.255 !",m_dialog_crypteur);
			m_live_en_ce_moment->setFont(QFont("Times", 12, QFont::Bold));
			m_live_en_ce_moment->resize(400,100);
			m_live_en_ce_moment->move(130,61);

			m_label[3] = new QLabel("111 :",m_dialog_crypteur);
			m_label[3]->setFont(QFont("Times", 10, QFont::Bold));
			m_label[3]->setMaximumWidth(40);


			m_lineEdit[0] = new QLineEdit("192",m_dialog_crypteur);
			m_lineEdit[0]->setFont(QFont("Times", 10, QFont::Bold));
			m_lineEdit[0]->setMaxLength(3);
			m_lineEdit[0]->setMaximumWidth(40);
			m_lineEdit[0]->setReadOnly(TRUE);

			m_appliquer_1 = new QPushButton("Appliquer pour 111");

            m_edit_1 = new QPushButton("Editer 111");

			m_vlineEdit[0] = new QLineEdit("", m_dialog_crypteur);
			m_vlineEdit[0]->setFont(QFont("Times", 10, QFont::Bold));
			m_vlineEdit[0]->setMaximumWidth(70);
                        m_vlineEdit[0]->setReadOnly( TRUE );
			m_ok_1 = new QPushButton("OK");

			m_label[4] = new QLabel("222 :",m_dialog_crypteur);
			m_label[4]->setFont(QFont("Times", 10, QFont::Bold));

			m_lineEdit[1] = new QLineEdit("168",m_dialog_crypteur);
			m_lineEdit[1]->setFont(QFont("Times", 10, QFont::Bold));
			m_lineEdit[1]->setMaximumWidth(40);
                        m_lineEdit[1]->setReadOnly( TRUE );

			m_appliquer_2 = new QPushButton("Appliquer pour 222");

            		m_edit_2 = new QPushButton("Editer 222");

            		m_vlineEdit[1] = new QLineEdit("",m_dialog_crypteur);
			m_vlineEdit[1]->setFont(QFont("Times", 10, QFont::Bold));
			m_vlineEdit[1]->setMaximumWidth(70);
			m_vlineEdit[1]->setReadOnly(TRUE);

			m_ok_2 = new QPushButton("OK");

			m_label[5] = new QLabel("333 :",m_dialog_crypteur);
			m_label[5]->setFont(QFont("Times", 10, QFont::Bold));

			m_lineEdit[2] = new QLineEdit("1",m_dialog_crypteur);
			m_lineEdit[2]->setFont(QFont("Times", 10, QFont::Bold));
			m_lineEdit[2]->setMaxLength(3);
			m_lineEdit[2]->setMaximumWidth(40);
			m_lineEdit[2]->setReadOnly(TRUE);


			m_appliquer_3 = new QPushButton("Appliquer pour 333");

            m_edit_3 = new QPushButton("Editer 333");

			m_vlineEdit[2] = new QLineEdit("",m_dialog_crypteur);
			m_vlineEdit[2]->setFont(QFont("Times", 10, QFont::Bold));
			m_vlineEdit[2]->setMaximumWidth(70);
			m_vlineEdit[2]->setReadOnly(TRUE);
			m_ok_3 = new QPushButton("OK");

			m_label[6] = new QLabel("444 : ",m_dialog_crypteur);
			m_label[6]->setFont(QFont("Times", 10, QFont::Bold));

			m_lineEdit[3] = new QLineEdit("1",m_dialog_crypteur);
			m_lineEdit[3]->setFont(QFont("Times", 10, QFont::Bold));
			m_lineEdit[3]->setMaxLength(3);
			m_lineEdit[3]->setMaximumWidth(40);
			m_lineEdit[3]->setReadOnly(TRUE);

			m_appliquer_4 = new QPushButton("Appliquer pour 444");

            m_edit_4 = new QPushButton("Editer 444");

			m_vlineEdit[3] = new QLineEdit("",m_dialog_crypteur);
			m_vlineEdit[3]->setFont(QFont("Times", 10, QFont::Bold));
			m_vlineEdit[3]->setMaximumWidth(70);
			m_vlineEdit[3]->setReadOnly(TRUE);

			m_ok_4 = new QPushButton("OK");



			m_generer_crypteur = new QPushButton("Calcule !",m_dialog_crypteur);
			m_generer_crypteur->setFont(QFont("Times", 15, QFont::Bold));
			m_generer_crypteur->move(100,350);


			m_annuler_crypteur = new QPushButton("Annuler", m_dialog_crypteur);
			m_annuler_crypteur->setFont(QFont("Times", 15, QFont::Bold));
			m_annuler_crypteur->move(300,350);

			m_verifier_crypteur = new QPushButton("Verifier", m_dialog_crypteur);
			m_verifier_crypteur->setFont(QFont("Times", 15, QFont::Bold));
			m_verifier_crypteur->move(200,350);


            m_groupBox_crypteur = new QGroupBox("Information",m_dialog_crypteur);
            m_groupBox_crypteur->setFont(QFont("Arial", 9, QFont::Bold));
            m_groupBox_crypteur->move(90,55);
            m_groupBox_crypteur->resize(300,75);


			QVBoxLayout *m_verticale_layout_c = new QVBoxLayout;

				m_verticale_layout_c->addWidget(m_label[3]); // 111:
				m_verticale_layout_c->addWidget(m_label[4]); // 222:
				m_verticale_layout_c->addWidget(m_label[5]); // 333:
				m_verticale_layout_c->addWidget(m_label[6]); // 444:

			QVBoxLayout *m_verticale_layout_c_2 = new QVBoxLayout;

				m_verticale_layout_c_2->addWidget(m_lineEdit[0]);
				m_verticale_layout_c_2->addWidget(m_lineEdit[1]);
				m_verticale_layout_c_2->addWidget(m_lineEdit[2]);
				m_verticale_layout_c_2->addWidget(m_lineEdit[3]);

			QVBoxLayout *m_verticale_layout_c_3 = new QVBoxLayout;

				m_verticale_layout_c_3->addWidget(m_appliquer_1);
				m_verticale_layout_c_3->addWidget(m_appliquer_2);
				m_verticale_layout_c_3->addWidget(m_appliquer_3);
				m_verticale_layout_c_3->addWidget(m_appliquer_4);

			QVBoxLayout *m_verticale_layout_c_4 = new QVBoxLayout;

				m_verticale_layout_c_4->addWidget(m_vlineEdit[0]);
				m_verticale_layout_c_4->addWidget(m_vlineEdit[1]);
				m_verticale_layout_c_4->addWidget(m_vlineEdit[2]);
				m_verticale_layout_c_4->addWidget(m_vlineEdit[3]);

			QVBoxLayout *m_verticale_layout_c_5 = new QVBoxLayout;

				m_verticale_layout_c_5->addWidget(m_ok_1);
				m_verticale_layout_c_5->addWidget(m_ok_2);
				m_verticale_layout_c_5->addWidget(m_ok_3);
				m_verticale_layout_c_5->addWidget(m_ok_4);

            QVBoxLayout *m_verticale_layout_c_6 = new QVBoxLayout;

                m_verticale_layout_c_6->addWidget(m_edit_1);
                m_verticale_layout_c_6->addWidget(m_edit_2);
                m_verticale_layout_c_6->addWidget(m_edit_3);
                m_verticale_layout_c_6->addWidget(m_edit_4);

			QGridLayout *m_crypteur_layout = new QGridLayout;

				m_crypteur_layout->addLayout(m_verticale_layout_c,1,0);
				m_crypteur_layout->addLayout(m_verticale_layout_c_2,1,1);
				m_crypteur_layout->addLayout(m_verticale_layout_c_3,1,2);
				m_crypteur_layout->addLayout(m_verticale_layout_c_4,1,3);
				m_crypteur_layout->addLayout(m_verticale_layout_c_5,1,4);
				m_crypteur_layout->addLayout(m_verticale_layout_c_6,1,5);



			m_generer_crypteur->setEnabled(false);

			m_dialog_crypteur->setLayout(m_crypteur_layout);

		// 0.1 : Resultat pour -> Crypt
			m_crypt = new QDialog(m_dialog_crypteur);
			m_crypt->setFixedSize(400,126);

				m_label[7] = new QLabel("                               Résultat",m_crypt);
				m_label[7]->setFont(QFont("Times", 15, QFont::Bold));

				m_lineEdit[4] = new QLineEdit("", m_crypt);
				//m_textEdit[0]->set
				m_lineEdit[4]->setFont(QFont("Arial", 10, QFont::Bold));
				m_lineEdit[4]->setReadOnly(TRUE);

				QPushButton *m_retour_crypt = new QPushButton("Retour");
				m_retour_crypt->setFont(QFont("Arial", 15, QFont::Bold));

				QGridLayout *m_crypt_layout = new QGridLayout;

                    m_crypt_layout->addWidget(m_label[7],0,0);
                    m_crypt_layout->addWidget(m_lineEdit[4],1,0);
                    m_crypt_layout->addWidget(m_retour_crypt,2,0);

                    m_crypt->setLayout(m_crypt_layout);

		// -- Fin pour Crypt dialog
	// -- Fin pour m_dialog_crypteur

	// 1 : Après avoir clicker Decrypteur
		m_dialog_decrypteur = new QDialog(this);
		m_dialog_decrypteur->setFixedSize(799,150);
		m_dialog_decrypteur->setWindowTitle("- Decrypteur -");


			m_label[8] = new QLabel("// - Décryptage d'IP - //",m_dialog_decrypteur);
			m_label[8]->setFont(QFont("Times", 25, QFont::Bold));
			m_label[8]->setGeometry(300,1,350,40);

			m_lineEdit[5] = new QLineEdit("            \t\t\tEntre 16 843 009 et 4 294 967 295",m_dialog_decrypteur);
			m_lineEdit[5]->setFont(QFont("Times", 15, QFont::Bold));
			m_lineEdit[5]->setGeometry(35,50,730,40);
            		m_lineEdit[5]->setReadOnly(TRUE);

            		m_appliquer_5 = new QPushButton("Appliquer Decrypteur",m_dialog_decrypteur);
            		m_appliquer_5->setFont(QFont("Times", 15, QFont::Bold));
            		m_appliquer_5->setGeometry(20,100,200,40);

            		m_edit_5 = new QPushButton("Editer",m_dialog_decrypteur);
            		m_edit_5->setFont(QFont("Times", 15, QFont::Bold));
            		m_edit_5->setGeometry(230,100,100,40);
            		m_edit_5->setEnabled(false);

            		m_verifier_decrypteur = new QPushButton("Verifier",m_dialog_decrypteur);
            		m_verifier_decrypteur->setFont(QFont("Times", 15, QFont::Bold));
            		m_verifier_decrypteur->setGeometry(340,100,130,40);
            		m_verifier_decrypteur->setEnabled(false);

            		m_ok_5 = new QPushButton("OK", m_dialog_decrypteur);
            		m_ok_5->setFont(QFont("Times", 15, QFont::Bold));
            		m_ok_5->setGeometry(480,100,70,40);
            		m_ok_5->setEnabled(false);

            		m_retour_decrypteur = new QPushButton("Retour",m_dialog_decrypteur);
			m_retour_decrypteur->setFont(QFont("Times", 15, QFont::Bold));
			m_retour_decrypteur->setGeometry(560,100,106,40);

			m_generer_decrypteur = new QPushButton("Trouve !",m_dialog_decrypteur);
			m_generer_decrypteur->setFont(QFont("Times", 15, QFont::Bold));
			m_generer_decrypteur->setGeometry(676,100,106,40);
            		m_generer_decrypteur->setEnabled(false);


			// 1.1 : Résultat pour -> Decrypt
				m_decrypt = new QDialog(m_dialog_decrypteur);

					m_label[9] = new QLabel("111 : ");
					m_label[9]->setFont(QFont("Times", 20, QFont::Bold));
					m_label[3]->setMaximumWidth(70);

					m_label[10] = new QLabel("222 : ");
					m_label[10]->setFont(QFont("Times", 20, QFont::Bold));
					m_label[10]->setMaximumWidth(70);

					m_label[11] = new QLabel("333 : ");
					m_label[11]->setFont(QFont("Times", 20, QFont::Bold));
					m_label[11]->setMaximumWidth(70);

					m_label[12] = new QLabel("444 : ");
					m_label[12]->setFont(QFont("Times", 20, QFont::Bold));
					m_label[12]->setMaximumWidth(70);

                    			m_lineEdit[9]   = new QLineEdit("", m_decrypt);
					m_lineEdit[10] = new QLineEdit("", m_decrypt);
					m_lineEdit[11] = new QLineEdit("", m_decrypt);
					m_lineEdit[12] = new QLineEdit("", m_decrypt);
					for(int i = 9 ; i <= 12 ; i++ ) { 
						m_lineEdit[i]->setMaximumWidth(70);
						m_lineEdit[i]->setReadOnly(TRUE); }
			

                    /*m_progressBar_decrypt = new QProgressBar(m_decrypt);
					m_progressBar_decrypt->setRange(0,1000);
					m_progressBar_decrypt->setValue(0);*/

                    /*m_progressBar_decrypt->setMinimum(16843009);
					m_progressBar_decrypt->setMaximum(4294967295);*/

                    /*QSlider *m_slider = new QSlider(Qt::Horizontal,m_decrypt);
						m_slider->setRange(0,1000);
						m_slider->setValue(0);*/

                    m_retour_decrypt = new QPushButton("Retour",m_decrypt);
                    m_retour_decrypt->setFont(QFont("Times", 15, QFont::Bold));
					m_retour_decrypt->setGeometry(210,150,100,25);

                QFormLayout *formLayout = new QFormLayout;
				formLayout->addRow(m_label[9],m_lineEdit[9]);
				formLayout->addRow(m_label[10],m_lineEdit[10]);
				formLayout->addRow(m_label[11],m_lineEdit[11]);
				formLayout->addRow(m_label[12],m_lineEdit[12]);
				formLayout->addRow(m_retour_decrypt);
				/*
				QVBoxLayout *m_verticale_layout_d_1 = new QVBoxLayout;

					m_verticale_layout_d_1->addWidget(m_lineEdit[9]);
					m_verticale_layout_d_1->addWidget(m_lineEdit[10]);
					m_verticale_layout_d_1->addWidget(m_lineEdit[11]);
					m_verticale_layout_d_1->addWidget(m_lineEdit[12]);*/
				//QVBoxLayout *m_verticale_layout_d_2 = new QVBoxLayout;

					//m_verticale_layout_d_2->addWidget(m_retour_decrypt);

                m_decrypt->setLayout(formLayout);

			// -- Fin pour Decrypt dialog
	// -- Fin pour m_dialog_decrypteur

	// 2 : Aprés avoir cliqué A propos depuis le menu principale

		m_dialog_apropos = new QDialog(this);
		m_dialog_apropos->setFixedSize(300,250);
		m_dialog_apropos->setWindowTitle("-- About =] --");

			m_label[13] = new QLabel("Nom:",m_dialog_apropos);
			m_label[14] = new QLabel("Version:",m_dialog_apropos);
			m_label[15] = new QLabel("Autheur:",m_dialog_apropos);
			m_label[16] = new QLabel("E-mail:",m_dialog_apropos);
			m_label[17] = new QLabel("Site Web:",m_dialog_apropos);
			m_label[18] = new QLabel("Compiler & Date:",m_dialog_apropos);

			m_lineEdit[13] = new QLineEdit("Crypteur/Decrypteur d'IP",m_dialog_apropos);
			m_lineEdit[14] = new QLineEdit("Release 0.1 Beta",m_dialog_apropos);
			m_lineEdit[15] = new QLineEdit("SKYHATE",m_dialog_apropos);
			m_lineEdit[16] = new QLineEdit("skyhate at gmail dot com",m_dialog_apropos);
			m_lineEdit[17] = new QLineEdit("http://zanarkand17.skyblog.com",m_dialog_apropos);
			m_lineEdit[18] = new QLineEdit("MinGW/QT @ 10/5/2009 :: 15:29",m_dialog_apropos);
				for(int i = 13; i <=18 ; i++ ){ m_lineEdit[i]->setReadOnly(TRUE); }
			m_fermer = new QPushButton("Fermer",m_dialog_apropos);
			m_fermer->setGeometry(120,220,60,30);

		QVBoxLayout *m_verticale_layout_d_2 = new QVBoxLayout;

			m_verticale_layout_d_2->addWidget(m_label[13]);
			m_verticale_layout_d_2->addWidget(m_label[14]);
			m_verticale_layout_d_2->addWidget(m_label[15]);
			m_verticale_layout_d_2->addWidget(m_label[16]);
			m_verticale_layout_d_2->addWidget(m_label[17]);
			m_verticale_layout_d_2->addWidget(m_label[18]);

		QVBoxLayout *m_verticale_layout_d_3 = new QVBoxLayout;

			m_verticale_layout_d_3->addWidget(m_lineEdit[13]);
			m_verticale_layout_d_3->addWidget(m_lineEdit[14]);
			m_verticale_layout_d_3->addWidget(m_lineEdit[15]);
			m_verticale_layout_d_3->addWidget(m_lineEdit[16]);
			m_verticale_layout_d_3->addWidget(m_lineEdit[17]);
			m_verticale_layout_d_3->addWidget(m_lineEdit[18]);
			
		QGridLayout *m_apropos_layout = new QGridLayout;

			m_apropos_layout->addLayout(m_verticale_layout_d_2,0,0);
			m_apropos_layout->addLayout(m_verticale_layout_d_3,0,1);

		m_dialog_apropos->setLayout(m_apropos_layout);

	setLayout(mainLayout);


	// -- Les connections -- //

        #ifdef  TEST
        //QObject::connect(m_test, SIGNAL(clicked()), this, SLOT(c_crypt()));
	    QObject::connect(m_test , SIGNAL(clicked()), this           , SLOT(decrypt()));
            QObject::connect(m_test , SIGNAL(clicked()), m_decrypt , SLOT(exec()));

        #endif

        // -- CONNECTIONS POUR M_DIALOG_CRYPTEUR -- //

                QObject::connect(m_crypteur       , SIGNAL(clicked()),
                                 m_dialog_crypteur, SLOT(show()));
                QObject::connect(m_appliquer_1    , SIGNAL(clicked()),
                                 this             , SLOT(appliquer0()));
                QObject::connect(m_ok_1           , SIGNAL(clicked()),
                                 this             , SLOT(ok0()));
                QObject::connect(m_appliquer_2    , SIGNAL(clicked()),
                                 this             , SLOT(appliquer1()));
                QObject::connect(m_ok_2           , SIGNAL(clicked()),
                                 this             , SLOT(ok1()));
                QObject::connect(m_appliquer_3    , SIGNAL(clicked()),
                                 this             , SLOT(appliquer2()));
                QObject::connect(m_ok_3           , SIGNAL(clicked()),
                                 this             , SLOT(ok2()));
                QObject::connect(m_appliquer_4    , SIGNAL(clicked()),
                                 this	     , SLOT(appliquer3()));
                QObject::connect(m_ok_4           , SIGNAL(clicked()),
                                 this             , SLOT(ok3()));
		

                QObject::connect(m_edit_1           , SIGNAL(clicked()),
                                 this               , SLOT(edit0()));
                QObject::connect(m_edit_2           , SIGNAL(clicked()),
                                 this               , SLOT(edit1()));
                QObject::connect(m_edit_3           , SIGNAL(clicked()),
                                 this               , SLOT(edit2()));
                QObject::connect(m_edit_4           , SIGNAL(clicked()),
                                 this               , SLOT(edit3()));
                QObject::connect(m_annuler_crypteur , SIGNAL(clicked()),
                                 m_dialog_crypteur  , SLOT(close()));



                QObject::connect(m_generer_crypteur  , SIGNAL(clicked()),
                                 this                , SLOT(c_crypt()));
                QObject::connect(m_verifier_crypteur , SIGNAL(clicked()),
                                 this                , SLOT(verifier()));
                QObject::connect(m_generer_crypteur  , SIGNAL(clicked()),
                                 m_crypt             , SLOT(exec()));

                // -- FIN DES CONNECTIONS POUR M_DIALOG_CRYPTEUR -- //

                    // -- CONNECTION POUR M_CRYPT -- //

                QObject::connect(m_retour_crypt , SIGNAL(clicked()),
                                     m_crypt        , SLOT(close()));




        // -- CONNECTIONS POUR DECRYPTEUR -- //

		//QObject::connect(m_decrypteur,SIGNAL(clicked()),m_dialog_decrypteur, SLOT(show())); // SI TU A TROUVER LA SOLUTION DECOMMENTE SA ! =)
            QObject::connect(m_appliquer_5              , SIGNAL(clicked()),
                             this                       , SLOT(appliquer4()));
            QObject::connect(m_edit_5                   , SIGNAL(clicked()),
                             this                       , SLOT(edit3()));
            QObject::connect(m_verifier_decrypteur      , SIGNAL(clicked()),
                             this                       , SLOT(verifier_decryptage()));
            QObject::connect(m_retour_decrypteur        , SIGNAL(clicked()),
                             m_dialog_decrypteur        , SLOT(close()));
            QObject::connect(m_generer_decrypteur       , SIGNAL(clicked()),
                             this                       , SLOT(decrypt()));
            QObject::connect(m_ok_5                     , SIGNAL(clicked()),
                             this                       , SLOT(ok4()));

        // -- FIN DES CONNECTIONS POUR M_DIALOG_DECRYPTEUR -- //

            QObject::connect(m_retour_decrypt    , SIGNAL(clicked()) ,
                             m_decrypt           , SLOT(close()));
            QObject::connect(m_about             , SIGNAL(clicked()) ,
                             m_dialog_apropos    , SLOT(show()));
            QObject::connect(m_fermer            , SIGNAL(clicked()) ,
                             m_dialog_apropos    , SLOT(close()));
            QObject::connect(m_decrypteur        , SIGNAL(clicked()) ,
                             m_dialog_decrypteur , SLOT(show()));
            QObject::connect(m_quitter           , SIGNAL(clicked()) ,
                             qApp                , SLOT(quit()));



}

// -------                                             ------- //
// -------  DEBUT DES FONCTIONS POUR M_DIALOG_CRYPTEUR ------- //
// -------                                             ------- //
BOOL Fenetre::verifierHashMd5(QString entre,QString *hash){

    // Hash l'entrée.
    QString hashDeEntre = HASHMD5(entre.toLongLong());

    //Comparée les 2 HASH
    if(0 == QString::compare(hashDeEntre,hash,Qt::CaseSensitive))
        return TRUE;
    else
        return FALSE;
}


// Has une entree de caractère et retourne le hash
// a 32 charactére hexadecimal .
QString Fenetre::HASHMD5( qulonglong entre_ )
{
	// Crée une nouvelle instance de QCryptographicHash
	QCryptographicHash md5Hasher( QCryptographicHash::Md5 );
	
	//Convertir l'entré a un tableaux de bytes et compute le hash
	QByteArray donner = md5Hasher.hash(QByteArray::number( entre_ ), QCryptographicHash::Md5 );
	
	donner = donner.toHex();
        QString string_ = "";
	
        for (int i = 0; i < donner.size() ; i++ ){
		string_.append(donner[i]+QString::fromAscii("x2"));
	}
        //QDi
	// Retourne le resultat  text hexadécimal .
	return string_;
}
	
	
	
void Fenetre::edit0()
{
    m_lineEdit[0]->setReadOnly(false);
    m_ok_1->setEnabled(TRUE);
    m_edit_1->setEnabled(false);

}
void Fenetre::edit1()
{
    m_lineEdit[1]->setReadOnly(false);
    m_ok_2->setEnabled(TRUE);
    m_edit_2->setEnabled(false);
}

void Fenetre::edit2()
{
    m_lineEdit[2]->setReadOnly(false);
    m_ok_3->setEnabled(TRUE);
    m_edit_3->setEnabled(false);

}

void Fenetre::edit3()
{
    m_lineEdit[3]->setReadOnly(false);
    m_ok_4->setEnabled(TRUE);
    m_edit_4->setEnabled(false);
}
void Fenetre::c_crypt()
{
        // -- 1 : Au départ je stocke dans un variable de type QString ce qu'a écrit l'utilisateur -- //
        // -- 2 : Aprés je les convertie en ulong                                                  -- //
        // -- 3 : Je fait ma calcule                                                    	         -- //	    		       -- //
        // -- 4 : Aprés je le convertie en hash Md5                                                -- //
        // -- 5 : Aprés la convertion je reçois un QString                                         -- //
        // 192.168.1.1 = ax21x20x27x2cx2ax2ex20x29x26x26x28x2fx2ax29x28x2ex2cx26x27x2bx29x2bx2dx28x2ax23x24x2fx2ax2cx20x2
        // a107cae09668fa98ec67b9bd8a34fac0
        // 192.168.1.2 = 8x25x27x29x2dx2ax25x21x27x2bx2bx26x25x2dx24x20x2dx2fx23x24x21x23x23x28x20x29x29x2bx2cx29x23x27x2
        // 8579da517bb65d40df341338099bc937
        QString partie[10];
        QString m_string_total;

        qulonglong nombre_unsigned[10], total;

    // 1 :
	partie[0] = m_vlineEdit[0]->text();
	partie[1] = m_vlineEdit[1]->text();
	partie[2] = m_vlineEdit[2]->text();
	partie[3] = m_vlineEdit[3]->text();

    // 2 :
	nombre_unsigned[0] = partie[0].toULong();
	nombre_unsigned[1] = partie[1].toULong();
	nombre_unsigned[2] = partie[2].toULong();
	nombre_unsigned[3] = partie[3].toULong();

    // 3 :
	nombre_unsigned[0] = nombre_unsigned[0]*16777216;
        nombre_unsigned[1] = nombre_unsigned[1]*65536;
        nombre_unsigned[2] = nombre_unsigned[2]*256;
        // 192 x 16777261 = 3221234112
        // 168 x 65536 = 11010048

        total = nombre_unsigned[0]+nombre_unsigned[1]+nombre_unsigned[2]+nombre_unsigned[3];
    
        m_string_total = HASHMD5(total);

        //total = HASHMD5(total);

        // -- 6 : Vérification de HASH MD5
        // Il doit être exactement pareille

        if(verifierHashMd5(QString::number(total),&m_string_total))
            QMessageBox::information(this,"TEST","Les 2 HASH Md5 sont pareille!",
                                     QMessageBox::Ok);
        else
            QMessageBox::information(this,"TEST",tr("HASH 1 = %0 \nHASH 2 = %1 \nLES 2 HASH Md5 sont différentes!")
                                     .arg(total),
                                     QMessageBox::Ok);

            //m_string_total.setNum(m_string_total.toInt());
            //m_string_total.setNum(total);

            m_lineEdit[4]->setText(m_string_total);
}

void Fenetre::appliquer0()
{
    //m_live_en_ce_moment->setText("Entrez un chiffre entre 0 ~ 255 ");
	m_lineEdit[0]->setReadOnly(false);
	m_appliquer_1->setEnabled(false);
	m_ok_1->setEnabled(TRUE);
}

void Fenetre::appliquer1()
{
    //m_live_en_ce_moment->setText("Entrez un chiffre entre 0 ~ 255 ");
	m_lineEdit[1]->setReadOnly(false);
	m_appliquer_2->setEnabled(false);
	m_ok_2->setEnabled(TRUE);
}

void Fenetre::appliquer2()
{
    //m_live_en_ce_moment->setText("Entrez un chiffre entre 0 ~ 255 ");
	m_lineEdit[2]->setReadOnly(false);
	m_appliquer_3->setEnabled(false);
	m_ok_3->setEnabled(TRUE);
}

void Fenetre::appliquer3()
{
    //m_live_en_ce_moment->setText("Entrez un chiffre entre 0 ~ 255 ");
	m_lineEdit[3]->setReadOnly(false);
	m_appliquer_4->setEnabled(false);
	m_ok_4->setEnabled(TRUE);
}

void Fenetre::ok0()
{

	QString text;

	text = m_lineEdit[0]->text();
	m_vlineEdit[0]->setText(text);
	m_lineEdit[0]->setText("");

	if (text == "" )
	{
		QMessageBox::warning(m_dialog_crypteur , tr("Erreur ! "),("S'il vous plait ecrivez les 3 chiffres -_-'"));
		m_generer_crypteur->setEnabled(false);
		return;
	}
	else
	{
		m_lineEdit[0]->setReadOnly(TRUE);
		m_appliquer_1->setEnabled(false);
		m_ok_1->setEnabled(false);
#ifdef MSG
		QMessageBox::information(m_dialog_crypteur,tr("Confirmer :) "),tr("\"%1\" est le nombre que vous avez choisi pour la partie 111 =D ").arg(text));
#endif
                m_ver_1 = TRUE;
		m_edit_1->setEnabled(TRUE);
	}

}

void Fenetre::ok1()
{
	QString text;

	text = m_lineEdit[1]->text();
	m_vlineEdit[1]->setText(text);
	m_lineEdit[1]->setText("");

	if (text == "" )
	{
		QMessageBox::warning(m_dialog_crypteur , tr("Erreur ! "),("S'il vous plait ecrivez les 3 chiffres -_-'"));
		m_generer_crypteur->setEnabled(false);
		return;
	}
	else
	{
		m_lineEdit[1]->setReadOnly(TRUE);
		m_appliquer_2->setEnabled(false);
		m_ok_2->setEnabled(false);
#ifdef MSG
		QMessageBox::information(m_dialog_crypteur,tr("Confirmer :) "),tr("\"%1\" est le nombre que vous avez choisi pour la partie 222 =D ").arg(text));
#endif
                m_ver_2 = TRUE;
		m_edit_2->setEnabled(TRUE);
	}

}

void Fenetre::ok2()
{
	QString text;

	text = m_lineEdit[2]->text();
	m_vlineEdit[2]->setText(text);
	m_lineEdit[2]->setText("");

	if (text == "" )
	{
		QMessageBox::warning(m_dialog_crypteur, tr("Erreur !"),tr("S'il vous plait ecrivez les 3 chiffres -_-' "));
		m_generer_crypteur->setEnabled(false);
		return;
	}
	else
	{
		m_lineEdit[2]->setReadOnly(TRUE);
		m_appliquer_3->setEnabled(false);
		m_ok_3->setEnabled(false);
#ifdef MSG
		QMessageBox::information(m_dialog_crypteur,tr("Confirmer :) "),tr("\"%1\" est le nombre que vous avez choisi pour la parti 333 =D ").arg(text));
#endif
                m_edit_3->setEnabled(TRUE);
		m_ver_3 = TRUE;
	}
}

void Fenetre::ok3()
{
	QString text;

	text = m_lineEdit[3]->text();
	m_vlineEdit[3]->setText(text);
	m_lineEdit[3]->setText("");

	if (text == "" )
	{
		QMessageBox::warning(m_dialog_crypteur, tr("Erreur !"),("S'il vous plait ecrivez les 3 chiffres -_-' "));
        m_generer_crypteur->setEnabled(TRUE);
		return;
	}
	else
	{
		m_lineEdit[3]->setReadOnly(TRUE);
#ifdef MSG
		QMessageBox::information(m_dialog_crypteur,tr("Confirmer :) "),tr("\"%1\" est le nombre que vous avez choisi pour la parti 333 =D ").arg(text));
#endif
                m_ok_4->setEnabled(FALSE);
                m_edit_4->setEnabled(TRUE);
		m_ver_4 = TRUE;
	}
}

void Fenetre::ok4()
{
    QString text = m_lineEdit[5]->text();
    bool fini = FALSE;

    if ( text == "" )
    {
        QMessageBox::warning(m_dialog_decrypteur,
        tr("o_o"),tr("Vous avez rien ecrit -_-'"));
        fini = TRUE;
    }

    ulong nombre_unsigned = 0,unsigned_plus_petit = 16843009, unsigned_plus_grand = 4294967295;
    nombre_unsigned = text.toULong();

    /*if ( ( nombre_unsigned < unsigned_plus_petit && fini == 0) || ( nombre_unsigned > unsigned_plus_grand && fini == 0) )
    {
        QMessageBox::warning(m_dialog_decrypteur,
        tr("Nombre erreur"),tr("Le nombre n'est pas dans l'intervale 16 843 009 et 4 294 967 295 ..."));
        fini++;

    }*/
    short arg = text.indexOf("x2");
    IF( arg == 1 ){
        IF ( fini == FALSE )
        {
            QMessageBox::information(m_dialog_decrypteur,
            tr("=D"),tr("Le nombre que vous avez choisi et %1 ").arg(text));
            m_generer_decrypteur->setEnabled(TRUE);
            return;
        }
        }
    ELSE {
        return; }




}

void Fenetre::verifier()
{
    QString text_1 , text_2, text_3 , text_4;

    text_1 = m_vlineEdit[0]->text();
    text_2 = m_vlineEdit[1]->text();
    text_3 = m_vlineEdit[2]->text();
    text_4 = m_vlineEdit[3]->text();

    QMessageBox::information(m_dialog_crypteur,tr("1 "),tr("Verification dans 111 ..."));
    if ( m_vlineEdit[0]->text() == "" )
    {
        QMessageBox::warning(m_dialog_crypteur,tr("PFF"),tr("C'est vide dans 111 o_O !"));
    }
    else
    {
        QMessageBox::information(m_dialog_crypteur,tr("1 "),tr("Il y a %1 dans 111 ^^").arg(text_1));
    }
    QMessageBox::information(m_dialog_crypteur,tr("2 "),tr("Verification dans 222 ..."));
    if (m_vlineEdit[1]->text() == "" )
    {
        QMessageBox::warning(m_dialog_crypteur,tr("PFF"),tr("C'est vide dans 222 o_O ! "));
    }
    else
    {
        QMessageBox::information(m_dialog_crypteur,tr("2 "),tr("Il y a %1 dans 222 ^^").arg(text_2));
    }
    QMessageBox::information(m_dialog_crypteur,tr("3 "),tr("Verification dans 333 ..."));
    if (m_vlineEdit[2]->text() == "" )
    {
        QMessageBox::warning(m_dialog_crypteur,tr("PFF"),tr("C'est vide dans 333 o_O ! "));
    }
    else
    {
        QMessageBox::information(m_dialog_crypteur,tr("3 "),tr("Il y a %1  dans 333 ^^").arg(text_3));
    }
    QMessageBox::information(m_dialog_crypteur,tr("4 "),tr("Verification dans 444 ..."));
    if (m_vlineEdit[3]->text() == "" )
    {
        QMessageBox::warning(m_dialog_crypteur,tr("PFF"),tr("C'est vide dans 444 o_O ! "));
    }
    else
    {
        QMessageBox::information(m_dialog_crypteur,tr("4 "),tr("Il y a %1 dans 444 ^^").arg(text_4));
    }
    if ( m_ver_1 == TRUE && m_ver_2 == TRUE && m_ver_3 == TRUE && m_ver_4 == TRUE )
    {
            QMessageBox::information(m_dialog_crypteur,
            tr("Complet"),tr("111:OK!\n222:OK!\n333:OK!\n444:OK!\n"));
            QMessageBox::information(m_dialog_crypteur,
            tr("OK"),tr("Vous pouvez maintenant cliquer sur Calculé!"));
            m_generer_crypteur->setEnabled(TRUE);
    }
}

// -------                                          ------- //
// ------- FIN DES FONCTIONS POUR M_DIALOG_CRYPTEUR ------- //
// -------                                          ------- //


// -------                                              ------- //
// ------- DEBUT DES FONCTIONS POUR M_DIALOG_DECRYPTEUR ------- //
// -------                                              ------- //



void Fenetre::appliquer4()
{
    m_lineEdit[5]->setReadOnly(false);
    m_ok_5->setEnabled(TRUE);
    m_appliquer_5->setEnabled(false);
	m_generer_decrypteur->setEnabled(false);
}


// POUR LE MOMENT PAS DE UTILITE //

void Fenetre::verifier_decryptage()
{


}

// POUR LE MOMENT PAS DE UTILITE //

// -------                                              						   ------- //
// ------- FIN DES FONCTIONS POUR M_DIALOG_DECRYPTEUR     ------- //
// -------                                              				                    ------- //


void Fenetre::decrypt()
{
    QString text = m_lineEdit[5]->text();

    text = text.replace("x2","");

    QMessageBox::information(this,"",tr("%0").arg(text));


    QVariant var = QVariant(text);
    BOOL B = var.canConvert<ulong>();
    aDecrypter = var.convert(QVariant::ULongLong);
    ////// 21 juin 00:22

        /*unsigned long partie1 = (aDecrypter >> 24) & 0xFF;
        unsigned long partie2 = (aDecrypter >> 16) & 0xFF;
        unsigned long partie3 = (aDecrypter >> 8) & 0xFF;
        unsigned long partie4 = aDecrypter & 0xFF;

	m_a.setNum(partie1);
	m_b.setNum(partie2);
	m_c.setNum(partie3);
	m_d.setNum(partie4);
	m_lineEdit[9]->setText(m_a);
	m_lineEdit[10]->setText(m_b);
	m_lineEdit[11]->setText(m_c);
	m_lineEdit[12]->setText(m_d);
	m_decrypt->exec();
	m_lineEdit[5]->setReadOnly(TRUE);
        m_appliquer_5->setEnabled(TRUE);*/
}

void Fenetre::desoler()
{
	QMessageBox::information(this,
        tr("Desoler =("),tr("Desoler mais pour le moment je n'ai pas trouvé la bonne methode pour decrypter =( ...Pour le moment utilisé mon décrypteur sur console."));

}


